import time
import sys
print("***************\033[33m欢迎使用三乐购物系统\033[0m***************")
login_dict={"刘强东":"123","马化腾":'123',"马云":"123","谢耕":"123",'曹国伟':'123','张朝阳':'123','杨元庆':'123','califeng':'123'}
# 定义用户字典
commodity={'F00001':{'name':'苹果','price':1.2,'time':0},'F00002':{'name':'香蕉','price':5.5,'time':0},'F00003':{'name':'车厘子','price':46.8,'time':0},'F00004':{'name':'芒果','price':16.8,'time':0},'F00005':{'name':'红李','price':29.9,'time':0}}
# 定义商品字典

judge_lst_01=['1','2','3','exit']
judge_lst_02=['是','否']
judge_lst_03=['F00001','F00002','F00003','F00004','F00005','2','3','4','exit','5']
judge_lst_04=['F00001','F00002','F00003','F00004','F00005']
# 定义故障函数所对应的列表

# 故障函数
def misarrange( temp ,judge ):
    temp=input()
    while temp not in judge:
        print('\033[31m宁的输入错误，请再次输入！！\033[0m')
        temp =input()
    return temp

# 预算的故障函数
def misarrange_nums( temp ):
    temp=input()
    while not temp.isdigit() or int(temp)<=0 :
        print('\033[31m宁的输入错误，请再次输入！！\033[0m')
        temp=input()
    return int(temp)

# 用户登入函数
def login_system():
    while True:
        username = input("请输入宁的账号：")
        userpasswd = input("请输入宁的密码：")
        if username in login_dict and userpasswd == login_dict.get(username, 0):
            time.sleep(0.3)
            print("\033[32m登入成功！！\033[0m")
            break
        else:
            print('\033[31m登入失败！！\033[0m')

# 查看商品信息函数
def shopping_info(shopping):
    if not shopping:
        print('当前宁还没有添加任何商品到购物车！！')
    for i, j in shopping.items():
        print(f"\033[31m该商品代号为{i},水果名字叫做{j.get('name', 0)}，价格为{j.get('price', 0)},该商品宁购买了{j.get('time',0)}次！\033[0m")

# 查看购物车信息函数
def shopping_info_02(shopping):
    if not shopping:
        print('当前宁还没有添加任何商品到购物车！！')
    for i, j in shopping.items():
        print(f"\033[34m该商品代号为{i},水果名字叫做{j.get('name', 0)}，价格为{j.get('price', 0)}\033[0m")

# 算总金额函数
def shopping_money_count(shopping):
    count=0
    for i,j in shopping.items():
        count+=j.get('price',0)*j.get('time',0)
    print(f'宁当前需要支付{count}块人民币！！')

# 删除购物车里面的商品的函数
def del_cart( shopping,match ):
    if match not in shopping:
        print('该商品不在购物车内，请再次尝试！！')
    else:
        if shopping.get(match, 0).get('time', 0) > 1:
            shopping[match]['time'] -= 1
        else:
            del shopping[match]
        print('成功从购物车中删除商品！')

login_system()  # 登入
print(f"我们的商品如下，请查看：")
shopping_info_02(commodity)    # 商品展示

print('请输入宁的预算金额：')
budget_01=''
budget=misarrange_nums(budget_01)   # 得到预算

shopping_cart={}    # 初始化购物车

while 1:
    print("\033[42m如果宁\n1.想购买商品，请输入1\n2.想查看商品信息请输入2\n3.想查看购物车的商品信息请按3\n4.想退出结算请按exit：\033[0m")
    temp_select=''
    temp_select=misarrange(temp_select,judge_lst_01)    # 得到用户做出的选择

    if temp_select == '2':
        shopping_info_02(commodity)
    elif temp_select == '3':
        print('当前宁还没有添加任何商品到购物车！！')
    elif temp_select == 'exit':
        print("\033[31m宁已退出三乐购物系统！！\033[0m")
        break
    elif temp_select == '1':
        while 1:
            print('\033[43m如果宁\n1.想购买请输入商品的代码\n2.想查看商品信息,请输入2\n3.想查看购物车的信息，请输入3\n4.想从购物车中删除商品请输入4\n5.想查看当前还剩余多少预算，请输入5\n6.选择退出结算，请输入exit：\033[0m')
            shopping_temp=''
            shopping_temp=misarrange(shopping_temp,judge_lst_03)        # 得到用户的选择

            if shopping_temp == 'exit':
                print('\033[41m宁是否需要购买当前商品，（是/否）：\033[0m')
                purchase_option_2=''
                purchase_option_2=misarrange(purchase_option_2,judge_lst_02)    # 得到用户的选择

                if purchase_option_2 == '是':
                    shopping_money_count(shopping_cart)
                    for i in range(11):         #一个动态的进度条
                        if i != 10:
                            sys.stdout.write("\033[34m==")
                        else:
                            sys.stdout.write("== \033[0m" + str(i * 10) + "%/100%")
                        sys.stdout.flush()
                        time.sleep(0.3)
                    print("\n支付成功！！欢迎宁下次光临三乐购物系统！！")
                else:
                    print('本次支付失败！！')
                    print("欢迎宁下次光临三乐购物系统！！")
                break
            elif shopping_temp == '2':
                shopping_info_02(commodity)
            elif shopping_temp == '3':
                shopping_info(shopping_cart)
            elif shopping_temp == '4':
                print('请输入要删除的商品代码：')
                temp_shopping=''
                temp_shopping=misarrange(temp_shopping,judge_lst_04)    #得到用户的选择

                if temp_shopping in shopping_cart :
                    budget += shopping_cart.get(temp_shopping, 0).get('price', 0)   #将删除的商品的钱加到预算当中去
                del_cart(shopping_cart,temp_shopping)       #执行删除操作
            elif shopping_temp=='5':
                print(f'当前宁的预算还剩余{budget}块钱！')
            else:
                shopping_cart.update({shopping_temp: commodity.get(shopping_temp, 0)})  #添加商品到购物车
                shopping_cart[shopping_temp]['time']+=1                                 #使得商品在购物车中的购买次数加1
                budget -= commodity.get(shopping_temp, 0).get('price', 0)               #预算相应减少
                if budget <= 0:
                    print(f"宁现在还剩余的预算有{round(budget,1)}，当前所想购买的商品的总金额已超过宁的预算！")
                    recharge=''
                    print("宁是否还想增加预算：（是/否）：")
                    recharge=misarrange(recharge,judge_lst_02)          #得到用户的选择
                    if recharge == '是':
                        recharge_money = int(input("请输入宁想增加的预算金额："))
                        budget += recharge_money
                        print('增加成功！！')
                    else:
                        purchase_option=''
                        print('\033[41m宁是否需要购买当前商品，（是/否）：\033[0m')
                        purchase_option=misarrange(purchase_option,judge_lst_02)         #得到用户的选择
                        if purchase_option == '是':
                            shopping_money_count(shopping_cart)
                            for i in range(11):                         #一个动态的进度条
                                if i != 10:
                                    sys.stdout.write("\033[34m==")
                                else:
                                    sys.stdout.write("== \033[0m" + str(i * 10) + "%/100%")
                                sys.stdout.flush()
                                time.sleep(0.3)
                            print("支付成功！！欢迎宁下次光临三乐购物系统！！")
                        else:
                            print('支付失败！！')
                            print("欢迎宁下次光临三乐购物系统！！")
                        break
                print('该商品已添加至购物车！！')
        if shopping_temp == 'exit':
            print("\033[31m宁已退出三乐购物系统！！\033[0m")
            break
        if budget <= 0:
            break


# 1.问题：商品只能买一次，
# 1.解决办法：考虑在字典里面增加一个成员：times:0 or 改用外面是元组里面是字典
#
# 2.问题：输入其他的字符就直接退出了或者没有反应
# 2.弄一个故障函数
